part of "../popup.dart";

/// 基于[showDialog]的基础上修改，改进之处：
/// 1. 指定了默认的背景和context，以免重复代码
/// 2. 当页面未加载时，会持续尝试直到加载成功为止
///
/// 它需要和各种Popup结合起来使用
///
/// 当使用await的时候，就是等待它dismiss才继续下一步行动
Future<void> pop({
  required Widget Function() builder,

  /// pop通常都是背景上面放一张卡片一样的东西
  /// 这个参数代表点击卡片周围的背景时，是否能解除pop
  bool dismissable = true,
}) async {
  // 定义弹窗的方法
  Future<void> showPop() => showDialog(
        barrierColor: COLOR.black.darken(0.6).withOpacity(0.95),
        context: contextNow,
        barrierDismissible: dismissable,
        builder: (_) => builder(),
      );

  // 先尝试pop
  try {
    await showPop();
  } catch (e) {
    // 如果失败的话，每隔100毫秒尝试一次，直到成功为止
    Timer.periodic(const Duration(milliseconds: 100), (timer) async {
      try {
        // 如果尝试失败，如果成功创建了，那么timer就会取消，否则就会一直尝试
        await showPop();
        timer.cancel();
      } catch (_) {}
    });
  }
}
